package com.scheduled.util;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.ResponseEntity;
import org.springframework.util.CollectionUtils;
import org.springframework.web.client.RestTemplate;

import java.util.Map;

/**
 * RestTemplate工具类
 *
 * @author : z_sz
 * @date : 2020-08-11 18:39
 **/
@Slf4j
public final class RestTemplateUtil {

    /**
     * 防止外部实例化
     */
    private RestTemplateUtil(){}

    /**
     * RestTemplate实例
     */
    private final static RestTemplate restTemplate = new RestTemplate();

    /**
     * 成功状态码
     */
    private final static Integer STATUS_CODE = 200;

    /**
     * Get请求
     * @param url 请求url
     * @param args 参数Map集合
     * @param classType 响应body类型
     * @return 访问结果
     */
    public static <T>T getForJson(String url, Map<String,String> args,Class<T> classType) {
        if(StringUtils.isBlank(url) || CollectionUtils.isEmpty(args)) {
            log.error("错误的参数,URL:{},arg:{}",url,args);
            return null;
        }
        ResponseEntity<T> responseEntity = restTemplate.getForEntity("http://"+url,classType, args);
        int statusCode = responseEntity.getStatusCodeValue();
        if(statusCode != STATUS_CODE) {
            log.error("访问失败,响应状态码是：{}",statusCode);
            return null;
        }
        return responseEntity.getBody();
    }

}
